<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  

  
  <title>面试 | Hexo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  
  
  
  <meta name="description" content="JUnit中主要的注解有哪些？ JUnit中主要的注解有： @Test - 除非另有说明，否则这是首先运行的测试方法。@BeforeClass - 这在类中存在的任何其他测试方法之前运行一次。@Before - 它在@Test注解之前运行。@After - 顾名思义，它在@Test之后运行。@AfterClass - 在运行类中的所有测试之后运行一次。 单元测试是什么？ 测试应用程序的单个功能（">
<meta property="og:type" content="article">
<meta property="og:title" content="面试">
<meta property="og:url" content="http://yoursite.com/2020/03/12/%E9%9D%A2%E8%AF%95/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:description" content="JUnit中主要的注解有哪些？ JUnit中主要的注解有： @Test - 除非另有说明，否则这是首先运行的测试方法。@BeforeClass - 这在类中存在的任何其他测试方法之前运行一次。@Before - 它在@Test注解之前运行。@After - 顾名思义，它在@Test之后运行。@AfterClass - 在运行类中的所有测试之后运行一次。 单元测试是什么？ 测试应用程序的单个功能（">
<meta property="og:locale" content="en_US">
<meta property="article:published_time" content="2020-03-12T00:24:06.134Z">
<meta property="article:modified_time" content="2020-03-11T07:07:37.703Z">
<meta property="article:author" content="John Doe">
<meta name="twitter:card" content="summary">
  
    <link rel="alternate" href="/atom.xml" title="Hexo" type="application/atom+xml">
  
  
    <link rel="icon" href="/images/v2-4f7a5f09e8d39964374a0b0144d36174_hd.jpg">
  
  
    <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  
  
<link rel="stylesheet" href="/css/style.css">

  
<link rel="stylesheet" href="/css/highlight.css">

<meta name="generator" content="Hexo 4.2.0"></head>

<body>
  <div id="fullpage" class="mobile-nav-right">
    
      <div id="wrapper" title="图片来自网络">
    
    
      <header id="header">
  <div id="nav-toggle" class="nav-toggle"></div>
  <div class="head-box global-width">
    <nav class="nav-box nav-right">
      
        <a class="nav-item" href="/" title
        
        >首页</a>
      
        <a class="nav-item" href="/archives" title
        
        >归档</a>
      
        <a class="nav-item" href="/" title
        
        >理财</a>
      
    </nav>
  </div>
</header>
      <div id="middlecontent" title class="global-width sidebar-right">
        <section id="main"><article id="post-面试" class="article global-container article-type-post" itemscope itemprop="blogPost">
  
    <header class="article-header">
      
  
    <h1 class="article-title" itemprop="name">
      面试
    </h1>
  

    </header>
  
  <div class="article-meta">
    <a href="/2020/03/12/%E9%9D%A2%E8%AF%95/" class="article-date">
  <time datetime="2020-03-12T00:24:06.134Z" itemprop="datePublished">2020-03-12</time>
</a>
    
    
  </div>
  
    <span id="busuanzi_container_page_pv">
      本文总阅读量<span id="busuanzi_value_page_pv"></span>次
    </span>
  

  <div class="article-inner">
    
    <div class="article-content article-content-cloud" itemprop="articleBody">
      
        <ol start="22">
<li><p>JUnit中主要的注解有哪些？</p>
<pre><code>JUnit中主要的注解有： @Test - 除非另有说明，否则这是首先运行的测试方法。@BeforeClass - 这在类中存在的任何其他测试方法之前运行一次。@Before - 它在@Test注解之前运行。@After - 顾名思义，它在@Test之后运行。@AfterClass - 在运行类中的所有测试之后运行一次。</code></pre></li>
<li><p>单元测试是什么？<br> 测试应用程序的单个功能（称为单元）的过程称为单元测试。</p>
</li>
<li><p>如何进行“private”方法的测试？<br>没有直接的方法来测试private方法; 因此，要进行手动测试，或者将方法改为protected方法。</p>
</li>
<li><p>您遵循单元测试方法命名约定是什么？<br>遵循的约定应该以结构化的方式包含方法名称所需的所有信息。 单元测试名称应该像文档一样清楚地说明测试的功能。 有各种技术可用于命名单元测试。 其中一些如下：给…当…然后…应该…等等</p>
</li>
</ol>
<h5>一、Http的报文结构。
      （1）HTTP请求报文
                一个HTTP请求报文由请求行、请求头部、空行和请求数据4个部分组成，下图是请求报文的一般格式。
（2）HTTP响应也由三个部分组成，分别是：状态行、消息报头、响应正文。
四、HTTP与HTTPS有什么区别？

<p>HTTP协议传输的数据都是未加密的，也就是明文的，因此使用HTTP协议传输隐私信息非常不安全，为了保证这些隐私数据能加密传输，于是网景公司设计了SSL（Secure Sockets Layer）协议用于对HTTP协议传输的数据进行加密，从而就诞生了HTTPS。</p>
<p>简单来说，HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议，要比http协议安全。</p>
<h5>HTTPS和HTTP的区别主要如下：

<p>1、https协议需要到ca申请证书，一般免费证书较少，因而需要一定费用。</p>
<p>2、http是超文本传输协议，信息是明文传输，https则是具有安全性的ssl加密传输协议。</p>
<p>3、http和https使用的是完全不同的连接方式，用的端口也不一样，前者是80，后者是443。</p>
<p>4、http的连接很简单，是无状态的；HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议，比http协议安全。<br>七、解释一下tcp三次握手四次挥手（对于有网络协议工程师之类笔试,几乎是必考的内容）</p>
<h5>TCP三次握手

<p>　　所谓三次握手，是指建立一个TCP连接时，需要客户端和服务器总共发送3个包。</p>
<p>　　三次握手的目的是连接服务器指定端口，建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中，客户端执行connect()时。将触发三次握手。<br>　　(1) 第一次握手：建立连接时，客户端A发送SYN包(SYN=j)到服务器B，并进入SYN_SEND状态，等待服务器B确认。<br> 　　(2) 第二次握手：服务器B收到SYN包，必须确认客户A的SYN(ACK=j+1)，同时自己也发送一个SYN包(SYN=k)，即SYN+ACK包，此时服务器B进入SYN_RECV状态。</p>
<p>　　 (3) 第三次握手：客户端A收到服务器B的SYN＋ACK包，向服务器B发送确认包ACK(ACK=k+1)，此包发送完毕，客户端A和服务器B进入ESTABLISHED状态，完成三次握手。</p>
<p>完成三次握手，客户端与服务器开始传送数据。</p>
<p>TCP 四次挥手<br>　　TCP的连接的拆除需要发送四个包，因此称为四次挥手。客户端或服务器均可主动发起挥手动作，在socket编程中，任何一方执行close()操作即可产生挥手操作。<br>　　TCP连接是全双工的，因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动，一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭，而另一方执行被动关闭。<br>（1） TCP客户端发送一个FIN，用来关闭客户到服务器的数据传送。<br>（2） 服务器收到这个FIN，它发回一个ACK，确认序号为收到的序号加1。和SYN一样，一个FIN将占用一个序号。<br>（3） 服务器关闭客户端的连接，发送一个FIN给客户端。<br>（4） 客户端发回ACK报文确认，并将确认序号设置为收到序号加1</p>
<p>　　</p>
<ol>
<li><p>序列号seq<br>占4个字节，用来标记数据段的顺序，TCP把连接中发送的所有数据字节都编上一个序号，第一个字节的编号由本地随机产生，给字节编上序号后，就给每一个报文段指派一个序号，序列号seq就是这个报文段中的第一个字节的数据编号。</p>
</li>
<li><p>确认号ack<br>占4个字节，期待收到对方下一个报文段的第一个数据字节的序号，序列号表示报文段携带数据的第一个字节的编号，而确认号指的是期望接受到下一个字节的编号，因此挡墙报文段最后一个字节的编号+1即是确认号。</p>
</li>
<li><p>确认ACK<br>占1个比特位，仅当ACK=1，确认号字段才有效。ACK=0，确认号无效。</p>
</li>
<li><p>同步SYN<br>连接建立时用于同步序号。当SYN=1，ACK=0表示：这是一个连接请求报文段。若同意连接，则在响应报文段中使用SYN=1，ACK=1.因此，SYN=1表示这是一个连接请求，或连接接收报文，SYN这个标志位只有在TCP建立连接才会被置为1，握手完成后SYN标志位被置为0.</p>
</li>
<li><p>终止FIN<br>用来释放一个</p>
</li>
</ol>
<p>SYN攻击<br>　　在三次握手过程中，服务器发送SYN-ACK之后，收到客户端的ACK之前的TCP连接称为半连接(half-open connect).此时服务器处于Syn_RECV状态.当收到ACK后，服务器转入ESTABLISHED状态.<br>Syn攻击就是 攻击客户端 在短时间内伪造大量不存在的IP地址，向服务器不断地发送syn包，服务器回复确认包，并等待客户的确认，由于源地址是不存在的，服务器需要不断的重发直 至超时，这些伪造的SYN包将长时间占用未连接队列，正常的SYN请求被丢弃，目标系统运行缓慢，严重者引起网络堵塞甚至系统瘫痪。<br>Syn攻击是一个典型的DDOS攻击。检测SYN攻击非常的方便，当你在服务器上看到大量的半连接状态时，特别是源IP地址是随机的，基本上可以断定这是一次SYN攻击.在Linux下可以如下命令检测是否被Syn攻击<br>netstat -n -p TCP | grep SYN_RECV<br>一般较新的TCP/IP协议栈都对这一过程进行修正来防范Syn攻击，修改tcp协议实现。主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等.<br>但是不能完全防范syn攻击。</p>
<h5>MAVEN

<p>多模块如何聚合<br>配置一个打包类型为pom的聚合模块，然后在该pom中使用元素声明要聚合的模块</p>
<p>对于一个多模块项目，如果管理项目依赖的版本<br>通过在父模块中声明dependencyManagement和pluginManagement， 然后让子模块通过元素指定父模块，这样子模块在定义依赖是就可以只定义groupId和artifactId，自动使用父模块的version,这样统一整个项目的依赖的版本。<br>Maven的生命周期</p>
<h6>maven有三套生命周期，分别为：

<p>1、clean 周期：主要用于清理上一次构建产生的文件，可以理解为删除target目录<br>2、默认周期，<br>主要阶段包含:</p>
<p>process-resources 默认处理src/test/resources/下的文件，将其输出到测试的classpath目录中,<br>compile 编译src/main/java下的java文件，产生对应的class,<br>process-test-resources 默认处理src/test/resources/下的文件，将其输出到测试的classpath目录中,<br>test-compile 编译src/test/java下的java文件，产生对应的class,<br>test 运行测试用例,<br>package 打包构件，即生成对应的jar, war等,<br>install将构件部署到本地仓库,<br>deploy 部署构件到远程仓库<br>3、site周期</p>
<p>主要阶段包含</p>
<p>site 产生项目的站点文档<br>site-deploy 将项目的站点文档部署到服务器</p>
<h1>Linux


<p>#日志查看<br>tail -n 500 log/spring.log</p>
<p>#查看端口占用<br>netstat -tunlp|grep <port></p>
<p>#根据名称查看进程<br>ps aux|grep <name><br>ps aux|grep -E “nginx|redis|mongo”</p>
<p>#查看挂载的磁盘<br>df -ll</p>
<p>#目前识别的磁盘、分区<br>fdisk -l</p>
<p>#查看目录的磁盘使用情况<br>du -h <path><br>du -h -d 2 <path> #只显示两层</p>
<p>#top相关<br>top -b -n 1 #批处理，显示一次，不阻塞<br>top -H -p <pid> #查看线程</p>
<p>#内存<br>free</p>
<p>#创建快捷方式<br>ln -s /map/server /server #创建/server 指向/map/server</p>
<p>#设置最大权限<br>chmod 777 <file><br>chmod 777 -R <dir></p>
<p>##什么是Spring Cloud？</p>
<p>Spring cloud流应用程序启动器是基于Spring Boot的Spring集成应用程序，提供与外部系统的集成。Spring cloud Task，一个生命周期短暂的微服务框架，用于快速构建执行有限数据处理的应用程序。<br>##服务注册和发现是什么意思？Spring Cloud如何实现？</p>
<p>当我们开始一个项目时，我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署，添加和修改这些属性变得更加复杂。有些服务可能会下降，而某些位置可能会发生变化。手动更改属性可能会产生问题。 Eureka服务注册和发现可以在这种情况下提供帮助。由于所有服务都在Eureka服务器上注册并通过调用Eureka服务器完成查找，因此无需处理服务地点的任何更改和处理。<br>###25、Spring 框架中都用到了哪些设计模式？<br>Spring框架中使用到了大量的设计模式，下面列举了比较有代表性的：</p>
<p>代理模式—在AOP和remoting中被用的比较多。<br>单例模式—在spring配置文件中定义的bean默认为单例模式。<br>模板方法—用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。<br>前端控制器—Spring提供了DispatcherServlet来对请求进行分发。<br>视图帮助(View Helper )—Spring提供了一系列的JSP标签，高效宏来辅助将分散的代码整合在视图里。<br>依赖注入—贯穿于BeanFactory / ApplicationContext接口的核心理念。<br>工厂模式—BeanFactory用来创建对象的实例。</p>
<h3 id="2、MySQL中myisam与innodb的区别，至少5点"><a href="#2、MySQL中myisam与innodb的区别，至少5点" class="headerlink" title="2、MySQL中myisam与innodb的区别，至少5点"></a>2、MySQL中myisam与innodb的区别，至少5点</h3><p>(1)、问5点不同</p>
<p>复制代码<br>1.InnoDB支持事物，而MyISAM不支持事物<br>2.InnoDB支持行级锁，而MyISAM支持表级锁<br>3.InnoDB支持MVCC, 而MyISAM不支持<br>4.InnoDB支持外键，而MyISAM不支持<br>5.InnoDB不支持全文索引，而MyISAM支持。<br>6.InnoDB不能通过直接拷贝表文件的方法拷贝表到另外一台机器， myisam 支持<br>7.InnoDB表支持多种行格式， myisam 不支持<br>8.InnoDB是索引组织表， myisam 是堆表<br>复制代码<br>(2)、innodb引擎的4大特性</p>
<p>1.插入缓冲（insert buffer)<br>2.二次写(double write)<br>3.自适应哈希索引(ahi)<br>4.预读(read ahead)</p>
<p>###你是如何监控你们的数据库的？你们的慢日志都是怎么查询的？<br>监控的工具有很多，例如zabbix，lepus，我这里用的是lepus</p>

      
    </div>
    
      <footer class="article-footer">
        完
      </footer>
    
  </div>
  
    
<nav id="article-nav">
  <div class="article-nav-block">
    
  </div>
  <div class="article-nav-block">
    
      <a href="/2020/03/12/%E6%8E%A5%E5%8F%A3%E5%8A%9F%E8%83%BD/" id="article-nav-older" class="article-nav-link-wrap">
        <div class="article-nav-title">接口功能</div>
        <strong class="article-nav-caption"></strong>
      </a>
    
  </div>
</nav>

    <link rel="stylesheet" href="/css/gitment.css"> 
<script src="/js/gitment.js"></script>

<div id="gitmentContainer"></div>

<script>
var gitment = new Gitment({
  owner: '',
  repo: '',
  oauth: {
    client_id: '',
    client_secret: '',
  },
})
gitment.render('gitmentContainer')
</script>

  
  
</article>
</section>
        <aside id="sidebar">
  
    <div class="widget-box">
  <div class="avatar-box">
    <img class="avatar" src="/images/v2-4f7a5f09e8d39964374a0b0144d36174_hd.jpg" title="图片来自网络"></img>
    <h3 class="avatar-name">
      
        星星的鑫
      
    </h3>
    <p class="avatar-slogan">
      不积跬步,无以至千里 ⚘⚘⚘⚘⚘⚘⚘⚘⚘⚘                好风光似虚似幻,少一分钟又如何
    </p>
  </div>
</div>


  
    
  <div class="widget-box">
    <h3 class="widget-title">Categories</h3>
    <div class="widget">
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%90%8E%E5%8F%B0%E5%BC%80%E5%8F%91/">后台开发</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-box">
    <h3 class="widget-title">Tags</h3>
    <div class="widget">
      <ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/java/" rel="tag">java</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-box">
    <h3 class="widget-title">Tag Cloud</h3>
    <div class="widget tagcloud">
      <a href="/tags/java/" style="font-size: 10px;">java</a>
    </div>
  </div>

  
    
  <div class="widget-box">
    <h3 class="widget-title">归档</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/03/">March 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2018/05/">May 2018</a></li></ul>
    </div>
  </div>

  
    
  <div class="widget-box">
    <h3 class="widget-title">最新文章</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/2020/03/12/%E9%9D%A2%E8%AF%95/">面试</a>
          </li>
        
          <li>
            <a href="/2020/03/12/%E6%8E%A5%E5%8F%A3%E5%8A%9F%E8%83%BD/">接口功能</a>
          </li>
        
          <li>
            <a href="/2020/03/10/hello-world%20-%20%E5%89%AF%E6%9C%AC/">Hello World</a>
          </li>
        
          <li>
            <a href="/2020/03/09/hello-world/">Hello World</a>
          </li>
        
          <li>
            <a href="/2018/05/30/Untitled/">httpclent调用webservice</a>
          </li>
        
      </ul>
    </div>
  </div>

  
      <div class="widget-box">
    <h3 class="widget-title">友链</h3>
    <div class="widget">
      
        <a style="display: block;" href="https://yiluyanxia.github.io/" title target='_blank'
        >♥(ˆ◡ˆԅ)鑫</a>
      
    </div>
  </div>
  <div class="widget-box">
      <h3 class="widget-title">友链2</h3>
      <div class="widget">
          
              <a style="display: block;" href="https://yiluyanxia.github.io/" title target='_blank'
              >♥(ˆ◡ˆԅ)鑫</a>
          
      </div>
  </div>

  
</aside>
      </div>
      <footer id="footer">
  <div class="foot-box global-width">
    &copy; 2020 John Doe &nbsp;&nbsp;
    Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
    &nbsp;|&nbsp;主题 <a href="https://github.com/yiluyanxia/hexo-theme-antiquity" target="_blank" rel="noopener">antiquity</a>
    <br>
    <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
    <span id="busuanzi_container_site_pv">不蒜子告之   阁下是第<span id="busuanzi_value_site_pv"></span>个访客</span>
  </div>
</footer>

      <script src="https://code.jquery.com/jquery-2.0.3.min.js"></script>
<script>
if (!window.jQuery) {
var script = document.createElement('script');
script.src = "/js/jquery-2.0.3.min.js";
document.body.write(script);
}
</script>

  
<link rel="stylesheet" href="/fancybox/jquery.fancybox.css">

  
<script src="/fancybox/jquery.fancybox.pack.js"></script>




<script src="/js/script.js"></script>




    </div>
    <nav id="mobile-nav" class="mobile-nav-box">
  <div class="mobile-nav-img mobile-nav-top"></div>
  
    <a href="/" class="mobile-nav-link">首页</a>
  
    <a href="/archives" class="mobile-nav-link">归档</a>
  
    <a href="/" class="mobile-nav-link">理财</a>
  
  <div class="mobile-nav-img  mobile-nav-bottom"></div>
</nav>    
  </div>
</body>
</html>